# -*- coding: utf-8 -*-
from autocomplete_light.contrib.generic_m2m import GenericModelForm, \
    GenericModelMultipleChoiceField
from autores.models import AutorOrdenado
from datetime import datetime
from django import forms
from django.db.models.query_utils import Q
from django.forms import ModelForm
from localidades.models import Lugar, Ciudad, Pais
from publicaciones.autocomplete_light_registry import AutocompleteCiudad
from publicaciones.models import Publicacion, Articulo, Capitulo, Libro, \
    Conferencia, Reporte, Tesis, NIVEL_DE_ACCESO
import autocomplete_light
#from publicaciones.autocomplete_light_registry import CiudadPaisItems



"""
class DatoTaxonomicoForm(ModelForm):
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(DatoTaxonomico)
        model=DatoTaxonomico
"""

def get_choices_for_publicacion_form():
    lista_retornar= []
    for sub_clase in Publicacion.__subclasses__():
        nombre_sub_clase = sub_clase._meta.verbose_name.capitalize()
        indice_sub_clase = Publicacion.__subclasses__().index(sub_clase)
        lista_retornar.append((indice_sub_clase,nombre_sub_clase))
    return lista_retornar


def get_choices_for_anho():
    lista_a_retornar = []
    lista_a_retornar.append(('','---------'))
    current_year = int(datetime.now().year) + 1
    for i in reversed(range(1900,current_year)):
        lista_a_retornar.append((i,i))
    return lista_a_retornar

class PublicacionForm(GenericModelForm):
    titulo = forms.CharField(label=u'Título de la Publicación')
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'Año de Publicación')
    tipo_de_publicacion = forms.ChoiceField(choices=get_choices_for_publicacion_form())
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Publicacion)
        model=Publicacion       
    def __init__(self, *args, **kw):
        super(PublicacionForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        self.fields['autores'].help_text = ''
        self.fields['autores_externos'].help_text = ''
        new_order = self.fields.keyOrder[:-2]
        new_order.insert(1, 'tipo_de_publicacion')
        self.fields.keyOrder = new_order
        

        
class ArticuloForm(GenericModelForm):
    titulo = forms.CharField(label=u'*Título del Artículo de Revista')
    anho = forms.ChoiceField(choices=get_choices_for_anho(), label=u'*Año de publicación')
    nombre_revista=forms.CharField(label=u'*Nombre de la Revista')
    paginas=forms.CharField(label=u'*Páginas', widget=forms.TextInput(attrs={'placeholder':u'Inicio-Fin'}))
    volumen=forms.IntegerField(label=u'*Volúmen')
    numero=forms.IntegerField(label=u'*Número')
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
#    ciudad_pais = forms.ModelChoiceField(Lugar.objects.filter(Q(pais__isnull = False) |   Q(ciudad__isnull = False))
#                                         ,widget = autocomplete_light.widgets.ChoiceWidget(CiudadPaisItems)
#                                         )
#    autores_todos = GenericModelMultipleChoiceField(
#        widget=autocomplete_light.MultipleChoiceWidget(
#            'AutocompleteAutoresTodosItems'))
#   content_object = autocomplete_light.GenericModelChoiceField(
#        widget=autocomplete_light.ChoiceWidget(
#            autocomplete='AutocompleteCiudadPaisItems'),label=u'Ciudad/País',required = False)
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'),required=False)
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'),required=False,label=u'País')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Articulo,autocomplete_exclude = ('autores','autores_todos'))
        model = Articulo
        exclude = (#'content_type', 
                   #'object_id',
                   #'ciudad_pais',
                   'autores',
                   #'nivel_de_acceso',
                   'autores_todos')
        
    def __init__(self, *args, **kw):
        super(ArticuloForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        #self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        #ordenar de la manera en que sera mostrado
        self.fields.keyOrder = ['titulo',
                                #'autores_todos', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'nombre_revista',
                                #'content_object',
                                'ciudad',
                                'pais',
                                'paginas',
                                'editorial',
                                'volumen',
                                'numero',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo',
                                'doc'
                                ]

        
class CapituloForm(ModelForm):
    titulo = forms.CharField(label='*Título del Capítulo de Libro')
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'', widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'*Año de Publicación')
    autores_ordenado_libro = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'),required=False)
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'),required=False)
    paginas=forms.CharField(label=u'*Páginas', widget=forms.TextInput(attrs={'placeholder':u'Inicio-Fin'}))
    editorial=forms.CharField(label=u'*Editorial')
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Capitulo)
        model=Capitulo
        
    def __init__(self, *args, **kw):
        super(CapituloForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        #self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        self.fields.keyOrder = ['titulo', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'titulo_libro',
                                #'autores_libro',
                                'paginas',
                                'editorial',
                                'pais',
                                'nro_estandar',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'autores_ordenado_libro',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo'
                                'doc'
                                ]

        
class LibroForm(ModelForm):
    titulo = forms.CharField(label=u'*Título del Libro')
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'*Año de Publicación')
    editorial=forms.CharField(label=u'*Editorial')
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'), label=u'*Ciudad')
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'),required=False,label=u'País')
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Libro)
        model = Libro
        
    def __init__(self, *args, **kw):
        super(LibroForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        self.fields.keyOrder = ['titulo', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'editorial',
                                'ciudad',
                                'pais',
                                'nro_estandar',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo'
                                'doc'
                                ]



class ConferenciaForm(ModelForm):
    titulo = forms.CharField(label=u'*Título de la Publicación en Conferencia')
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'*Año de Publicación')
    nombre_conferencia = forms.CharField(label=u'*Nombre de la Conferencia')
    paginas=forms.CharField(label=u'Páginas', required=False, widget=forms.TextInput(attrs={'placeholder':u'Inicio-Fin'}))
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'),required=False)
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'),label=u'*País')
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Conferencia)
        model=Conferencia
        
    def __init__(self, *args, **kw):
        super(ConferenciaForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        #self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        self.fields.keyOrder = ['titulo', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'nombre_conferencia',
                                'paginas',
                                'editorial',
                                #'ciudad_pais',
                                'ciudad',
                                'pais',
                                'nro_estandar',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo'
                                'doc'
                                ]

        
                
class ReporteForm(ModelForm):
    titulo = forms.CharField(label=u'*Título del Reporte Técnico')
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'*Año de Publicación')
    institucion = forms.CharField(label=u'*Institución')
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'),required=False)
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'), label=u'*País')
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Reporte)
        model=Reporte
        
    def __init__(self, *args, **kw):
        super(ReporteForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        #self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        
        self.fields.keyOrder = ['titulo', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'institucion',
                                #'ciudad_pais',
                                'ciudad',
                                'pais',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo'
                                'doc'
                                ]



class TesisForm(ModelForm):
    titulo = forms.CharField(label=u'*Título de la Tesis')
    institucion = forms.CharField(label=u'*Institución')
    carrera = forms.CharField(label=u'*Carrera')
    autores_externos = forms.ModelMultipleChoiceField(AutorOrdenado.objects.all(),required=False,label=u'',widget = forms.SelectMultiple(attrs={'style':'display:none;'}))
    anho = forms.ChoiceField(choices=get_choices_for_anho(),label=u'*Año de Publicación')
    ciudad = forms.ModelChoiceField(Ciudad.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompleteCiudad'), required=False)
    pais = forms.ModelChoiceField(Pais.objects.all(),widget = autocomplete_light.ChoiceWidget('AutocompletePais'), required=False)
    nivel = forms.ChoiceField(choices = NIVEL_DE_ACCESO, label=u'*Nivel de acceso')
    TIPO_TESIS_CHOICES = (
        ('P', 'Pre-Grado'),
        ('G', 'Grado'),
        ('O', 'Post-Grado'),
    )
    tipo_tesis = forms.ChoiceField(choices=TIPO_TESIS_CHOICES,label=u'*Tipo')
    class Meta:
        widgets = autocomplete_light.get_widgets_dict(Tesis)
        model=Tesis
        
    def __init__(self, *args, **kw):
        super(TesisForm, self).__init__(*args, **kw)
        self.fields['lineas'].help_text = ''
        self.fields['datos'].help_text = ''
        #self.fields['autores'].help_text = ''
        #self.fields['autores_externos'].help_text = ''
        self.fields['instituciones'].help_text = ''
        self.fields.keyOrder = ['titulo', 
                                'descripcion',
                                'palabras_clave', 
                                'anho', 
                                'mes',
                                'tipo_tesis',
                                'institucion',
                                'carrera',
                                'tutores',
                                #'ciudad_pais',
                                'ciudad',
                                'pais',
                                'url',
                                'nivel',
                                #'autores',
                                'autores_externos',
                                'lineas',
                                'datos',
                                'instituciones',
                                #'archivo'
                                'doc'
                                ]

        